package top.jle.spring.basic.dto;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import top.jle.jpa.basic.dao.PagedResult;
import top.jle.jpa.basic.entities.Entity;

import java.util.ArrayList;
import java.util.List;
@Slf4j
public abstract class DTOConvertor {

    public static <PO extends Entity,DTO extends AbstractDTO> PO dto2po(Class<PO> type, DTO dto){
        PO po = BeanUtils.instantiateClass(type);
        if(dto==null)return null;
        BeanUtils.copyProperties(dto,po);
        return po;
    }
    public static  <PO extends Entity,DTO extends AbstractDTO> List<PO> dto2po(Class<PO> type,List<DTO> dtoList){
        List<PO> poList = new ArrayList<>();
        for (DTO dto : dtoList) {
            poList.add(dto2po(type,dto));
        }
        return poList;
    }
    public static <PO extends Entity,DTO extends AbstractDTO> DTO po2dto(Class<DTO> type,PO po){
        DTO dto = BeanUtils.instantiateClass(type);
        if(po==null)return null;
        BeanUtils.copyProperties(po,dto);
        return dto;
    }
    public static <PO extends Entity,DTO extends AbstractDTO> List<DTO> po2dto(Class<DTO> type,List<PO> poList){
        List<DTO> dtoList = new ArrayList<>();
        for (PO po : poList) {
            dtoList.add(po2dto(type,po));
        }
        return dtoList;
    }
    public static <PO extends Entity,DTO extends AbstractDTO> PagedResult<DTO> po2dto(Class<DTO> type, PagedResult<PO> pagedResult){
        PagedResult<DTO> result = new PagedResult<>(
                po2dto(type,pagedResult.getResultList()),
                pagedResult.getNextOffset(),
                pagedResult.getTotalCount(),
                pagedResult.getCurrentPage());
        result.setTotalPageNum(pagedResult.getTotalPageNum());
        return result;
    }

}

